package modelo.jugadores;

import java.util.Vector;

import modelo.jugadores.datosDeUnJugador.DatosDeUnaFechaDeUnJugador;
import modelo.jugadores.datosDeUnJugador.DatosDeUnaFechaDeUnJugadorConVayaInvicta;

import excepciones.ExcepcionNumeroDeFechaImposible;

public abstract class JugadorConVayaInvicta extends Jugador {

	//ATRIBUTOS
	protected int puntajePorVayaInvicta;
	
	//METODOS INTERNOS
	protected void crearYllenarLosDatosPorFechaDeUnJugador(){
		
		this.datosPorFechaDelJugador = new Vector<DatosDeUnaFechaDeUnJugador>(CANTIDAD_TOTAL_DE_FECHAS);
		
		for(int i = 0; i < CANTIDAD_TOTAL_DE_FECHAS; i++){
			
			this.datosPorFechaDelJugador.insertElementAt(new DatosDeUnaFechaDeUnJugadorConVayaInvicta(), i);
			
		}
		
	}
	
	//METODOS PUBLICOS
	public JugadorConVayaInvicta(String unNombre, int unValorDeMercado){
		
		super(unNombre, unValorDeMercado);
		
	}

	//****************************************************************************
	
	public void obtuvoVayaInvictaEnLaFecha(int unaFecha) throws ExcepcionNumeroDeFechaImposible{
		
		try{
			
			this.corroborarSiEstaEnElRangoCorrectoLaFecha(unaFecha);
			
			DatosDeUnaFechaDeUnJugadorConVayaInvicta unosDatosDeUnaFechaDelJugador;
			
			unosDatosDeUnaFechaDelJugador = (DatosDeUnaFechaDeUnJugadorConVayaInvicta) this.datosPorFechaDelJugador.get(unaFecha - 1);

			unosDatosDeUnaFechaDelJugador.jugadorObtuvoVayaInvicta();
						
			this.datosPorFechaDelJugador.insertElementAt(unosDatosDeUnaFechaDelJugador, unaFecha - 1);

		}catch(ExcepcionNumeroDeFechaImposible miExcepcion){
			
			throw miExcepcion;
			
		}	
		
	}

	//*************************************************************************
	
	public boolean tuvoVayaInvictaEnLaFecha(int unaFecha) throws ExcepcionNumeroDeFechaImposible{
		
		try{
			
			this.corroborarSiEstaEnElRangoCorrectoLaFecha(unaFecha);
			
			return (((DatosDeUnaFechaDeUnJugadorConVayaInvicta) this.datosPorFechaDelJugador.get(unaFecha - 1)).jugadorTieneVayaInvicta());
			
		}catch(ExcepcionNumeroDeFechaImposible miExcepcion){
			
			throw miExcepcion;
			
		}	
		
	}
	
	//*************************************************************************
	
	public int obtenerPuntajeTotalDeLaFecha(int unaFecha) throws ExcepcionNumeroDeFechaImposible{
		
		try{
			
			int puntajeFinal = super.obtenerPuntajeTotalDeLaFecha(unaFecha);
			
			if(((DatosDeUnaFechaDeUnJugadorConVayaInvicta) this.datosPorFechaDelJugador.get(unaFecha - 1)).jugadorTieneVayaInvicta()){
				
				puntajeFinal += this.puntajePorVayaInvicta;
				
			}
			
			return puntajeFinal;
			
		}catch(ExcepcionNumeroDeFechaImposible miExcepcion){
			
			throw miExcepcion;
			
		}	
		
	}
	
	//************************************************************************
	
}
